package hotel.meituan.oversea.biz.task;

import hotel.base.oversea.utils.DateUtil;
import hotel.base.oversea.vo.RoomDataEntityVO;
import hotel.base.oversea.vo.RoomStatusInventory;
import hotel.base.oversea.vo.meituan.request.goods.MtHotelGoodsStatusDetailStateVo;
import hotel.base.oversea.vo.meituan.request.goods.MtHotelGoodsStatusDetailVo;
import hotel.meituan.oversea.biz.service.MtHotelGoodsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.List;


@Slf4j
@Component
public class MeituanSaveUpdateGoodsStatusTableOtherTask {
    private String timestamp = "Msugptt"+String.valueOf(System.currentTimeMillis());
    @Autowired
    private MtHotelGoodsService mtHotelGoodsService;
    @Autowired
    private RestTemplate restTemplate;

    //@Async 标识这个方法异步执行，可返回void或Future
    @Async
    public void executeSaveUpdateGoodsStatusTableOther(List<RoomDataEntityVO> oneHotelAboutAllChangeGoodsVoSwitchsApi, String thisHotelId,String timestamp){
        //log.info("MeituanSaveUpdateGoodsStatusTableOtherTask  {}  异步房态存在变动数据，更新产品房态表的最新房态 oneHotelAboutAllChangeGoodsVoSwitchsApi={},thisHotelId={}",timestamp, JSON.toJSON(oneHotelAboutAllChangeGoodsVoSwitchsApi),thisHotelId);

        List<MtHotelGoodsStatusDetailVo> goodsList = new ArrayList<>();

        for (RoomDataEntityVO c:oneHotelAboutAllChangeGoodsVoSwitchsApi){
            MtHotelGoodsStatusDetailVo mtHotelGoodsStatusDetailVo = new MtHotelGoodsStatusDetailVo();
            mtHotelGoodsStatusDetailVo.setGoodsId(c.getGoodId());
            mtHotelGoodsStatusDetailVo.setStatus(-1);//自定义  因为异步通知没有该字段，接口才有，该字段实际没用
            List<MtHotelGoodsStatusDetailStateVo> goodsStatuses = new ArrayList<>();
            for (RoomStatusInventory a:c.getRoomStatusInventorys()){
                MtHotelGoodsStatusDetailStateVo mtHotelGoodsStatusDetailStateVo = new MtHotelGoodsStatusDetailStateVo();
                mtHotelGoodsStatusDetailStateVo.setDate(a.getDate());
                mtHotelGoodsStatusDetailStateVo.setStatus(a.getGoodStatus());
                goodsStatuses.add(mtHotelGoodsStatusDetailStateVo);
            }
            mtHotelGoodsStatusDetailVo.setGoodsStatuses(goodsStatuses);
            goodsList.add(mtHotelGoodsStatusDetailVo);
        }

        log.info("MeituanSaveUpdateGoodsStatusTableOtherTask {} >>>>>>>>> 异步线程 更新 价格 库表  开始执行时间：{}",timestamp,DateUtil.getNowTime());
        if (null != goodsList && goodsList.size() > 0) {
            log.info("MeituanSaveUpdateGoodsStatusTableOtherTask saveGoodsStatus 保存日志 goodsList={}，hotelId={}",goodsList,thisHotelId);
            mtHotelGoodsService.saveGoodsStatus(goodsList,thisHotelId);
        }
    }


}
